查看原文
其他

中枪了没有!游戏开发过程中容易忽略的事(二)

2016-08-16 译者:张大伟 Gad-腾讯游戏开发者平台
在你的游戏开发过程中,有很多东西都有可能会出错。比如你的模型可能有太多的三角形而超出了你的目标平台可以处理的能力、你选择的算法可能对于你的CPU来说计算量太大了或者你可能使用了太多材质以至于批次合并渲染没有办法有效地工作。这些都是棘手的问题,而你作为一个游戏开发者应该永远记住,要保持视觉效果和性能之间的良好平衡。然而,有一些事情是如此的简单,我们会经常忘记它们的存在,但是这些简单的事情可以对你的游戏性能产生严重的影响。
上一次我们谈到了纹理导入设置是如何杀死你的游戏性能的。这一次,我们将谈论声音的导入设置,以及为什么声音的导入设置很重要。 

音频片段的导入设置

当你用Unity进行游戏开发的时候,许多事情可以保持它们的默认设置,然后一切就可以工作的很顺利。当然,在大多数情况下默认设置不是最优的设置,但是在默认设置下,你的游戏应该能正常运行。很不幸的是,这条规则并不适用于音频片段的导入设置。
音频片段(声音文件)的导入工作起来与纹理导入非常类似。Unity支持多种不同的音频格式,但最后都会被转换成首选格式(具体格式是什么,会由引擎来决定)。在目前的Unity版本5.2.1,音频的格式可以是PCM 、ADPCM 、Vorbis/ MP3和HEVAG。注意,并不是每个平台都可以处理所有的这些压缩格式,甚至在某些平台下只有一种压缩音频格式是支持的(举个简单的例子来说,WebGL平台只能支持AAC格式的音频剪辑)。 Unity支持压缩的和原生的音频。任何类型的音频文件,最初都以原生音频导入可以通过选择加载类型选择运行时Unity加载音频的方法。文件类型转换
1AIFF格式-转换为无压缩音频导入,最适合短音效果。可以在编辑器中按需求压缩
2WAV格式-转换为无压缩音频导入,最适合短音效果。可以在编辑器中按需求压缩
3MP3格式-转换成Ogg格式导入,最适合较长的音乐曲目。
4OGG格式-压缩音频格式(与iPhone设备和某些Android设备不兼容),最适合较长的音乐曲目。

内存问题

所有的音频剪辑默认情况下都会使用“在加载的时候才解压缩”这个加载选项,以及“ Vorbis”压缩格式进行导入。



上面的截图就是音频剪辑的默认导入设置。
你应该非常小心使用此设置,因为如果把这个设置用在你所有的音频剪辑上的时候(Unity在默认设置下就会这么做!)可能会消耗大量的游戏内存!
你看到截图中的信息框了么?原始文件的大小是35.9 MB,导入以后的大小是10.7 MB。这意味着,音频片段将把你的游戏(存档)的大小增大10MB,但是在进行游戏的时候需要将近36MB的内存空间!如果你是在为个人电脑开发游戏的话这听起来不是太吓人,因为对于个人电脑来说有8GB的内存空间是很普遍的,但是对于手机设备来说,内存空间仍然是非常有限的。(所以才需要小心设置不要把原本就很少的手机内存消耗的更加严重。) 
什么时候应该使用特定的加载类型?

让我们开门见山直接讨论该使用什么类型的加载类型。每种加载类型和压缩格式的组合都可以使用,但是你要知道哪种可能选择的组合会是最优组合。一共有三种加载类型:
在内存中处于压缩格式-音频片段将被存储在内存空间中,并且会在播放的时候进行解压缩。不需要在播放的时候要求额外的内存空间。
流类型-音频片段将被存储在设备的永久存储空间中(比如说硬盘驱动器,闪存驱动器等等)并会在播放的时候进行流格式化。存储和播放不需要要求额外的内存空间。(最起码这个值的变化非常的不明显)。
在加载的时候进行解压缩-音频片段将会以未压缩的格式存储在内存空间里面。这个选项将要求最多的内存空间,但是在播放的时候不会像其他选项那样要求那么多的中央处理器的处理能力 因此,这三个选项我们该使用哪一个?这取决于… 
音乐和/或周围的声音
音乐存储在比较长的音频片段里面,因此它可以消耗大量的内存。当然,我们不希望音乐被压缩到内存中然后在播放的时候才被解压缩,因此,你有两个选择:

1使用加载类型“流类型”和压缩格式“ Vorbis”。这种组合将使用最小的内存量,但是需要一些额外的中央处理器的处理能力和磁盘输入输出的吞吐量。
2 使用加载类型“在内存中处于压缩格式”和压缩格式“ Vorbis“。

这种组合和第一种解决方案之间唯一的区别是它用磁盘输入输出的吞吐量与内存使用量进行了交换(也就是在内存中使用的压缩格式,这是的内存的使用量变小了,但是需要在播放的时候进行解压缩,这就带来用磁盘输入输出的吞吐量,所以是用磁盘输入输出的吞吐量交换了内存使用量,之余选择第一种还是第二种方案,一般是看到底音乐占据多少内存以及你的目标机型是什么样子的,如果音乐占据的内存本身比较高,你的目标机型的内存又比较小,那么就选择第二种,这种方案会卡一点,否则选择第一种就更好)。请注意,你可以通过调整品质滑块来降低压缩片段的大小,但是这是以对音质的损害为代价的。通常情况下,100%确实是太高了,我会建议70%左右的设置。
需要注意的是,如果你有超过2个以上的音乐/环境声音剪辑像这个样子进行播放的话,它会消耗非常严重的中央处理器的处理能力。
声音特效

声音特效一般是比较短或者中等长度的声音片段。至于播放频率的话,可以非常频繁也可以很少播放。这里有一些规则要注意:
1.    对于经常播放并且长度比较短的声音剪辑,使用“在加载的时候进行解压缩“的加载选项以及PCM或者ADPCM 的压缩格式。如果选择PCM压缩格式的话,根本就不需要解压缩。如果声音剪辑比较短的话,它加载起来就会非常的快。你还可以使用ADPCM。它需要进行解压缩,但是它的解压缩和Vorbis比起来是非常轻量的。
2.    对于经常播放并且长度中等的声音剪辑,使用” 在内存中处于压缩格式“的加载选项以及ADPCM 这种压缩格式。ADPCM大概比起原始的PCM格式的大小只有它的1/3.5这么小,并且解压缩算法并不会像Vorbis消耗那么多的中央处理器的处理能力。
3.    对于很少播放并且长度比较短的声音剪辑,使用” 在内存中处于压缩格式“的加载选项以及ADPCM 这种压缩格式。这么选择的原因同第2点的选择原因是完全相同的。(ADPCM大概比起原始的PCM格式的大小只有它的1/3.5这么小,并且解压缩算法并不会像Vorbis消耗那么多的中央处理器的处理能力。)
4.    对于很少播放并且长度中等的声音剪辑,使用” 在内存中处于压缩格式“的加载选项以及Vorbis这种压缩格式。这种声音特效可能对于ADPCM格式来说太长而无法保存并且播放的频率可能非常的低,因此在解压缩的时候需要额外的中央处理器的处理能力也不会是消耗很大的事情。

总结
要记住总是要检查下你的音频片段导入设置。这些都是你的游戏性能的无声杀手。如果这些东西设置正确的话,你会给那些重要的东西赢得一些额外的中央处理器的计算能力。 也请看一看Unity手册里面关于导入设置的信息和指引。

【版权声明】原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。

近期热文

中枪了没有!游戏开发过程中容易忽略的事

如何系统地学习游戏中的状态机?



腾讯游戏开发者平台长按,识别二维码,加关注
经验分享丨项目实践项目孵化丨渠道发行做有梦想的游戏人

-GAME AND DREAM-


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存